package com.xxk.wdis.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xxk.wdis.entity.DrugInputOutput;
import com.xxk.wdis.service.IDrugInputOutputService;
import com.xxk.wdis.utills.HisResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.lang.model.element.NestingKind;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * <p>
 * 出入库明细表：drug_input_output
 * 前端控制器
 * </p>
 *
 * @author cwb
 * @since 2020-04-02
 * <p>
 * 增
 * 单条新增 /drug-input-output/insert
 * 删
 * 查
 * 按流水号查询 /drug-input-output/listBySerialNo
 * 改
 * 单条更新 /drug-input-output/update
 */
@Slf4j
@RestController
@RequestMapping("/drug-input-output")
public class DrugInputOutputController {
    @Autowired
    IDrugInputOutputService iDrugInputOutputService;

    @GetMapping("/findAll")
    public Object findAll() {
        List<DrugInputOutput> list = iDrugInputOutputService.list();
        return list;
    }

    /**
     * 出入库明细表：单条新增
     *
     * @param drugInputOutput 出入库明细实体
     * @return 插入的数据
     */
    @PostMapping("/insert")
    public Object insert(DrugInputOutput drugInputOutput) {
        // 空值检测
        if (StringUtils.isEmpty(drugInputOutput.getType())) {
            return HisResult.error("出入库类型不能为空");
        } else if (drugInputOutput.getDrugId() == null) {
            return HisResult.error("药品ID不能为空");
        } else if (StringUtils.isEmpty(drugInputOutput.getDrugUnit())) {
            return HisResult.error("药品单位不能为空");
        } else if (drugInputOutput.getPrice() == null) {
            return HisResult.error("价格不能为空");
        } else if (drugInputOutput.getNumber() == null) {
            return HisResult.error("数量不能为空");
        }
        // 添加创建日期
        // drugInputOutput.setGmtCreate(LocalDateTime.now());
        try {
            // 开始执行SQL插入
            if (iDrugInputOutputService.save(drugInputOutput)) {
                // 新增成功
                return HisResult.ok(drugInputOutput);
            } else {
                // 新增失败
                return HisResult.error("出入库明细表：单条新增失败");
            }
        } catch (Exception e) {
            log.error("出入库明细表：单条新增出错", e);
            return HisResult.error("出入库明细表：单条新增出错");
        }
    }


    /**
     * 按序列号、创建日期、状态等参数查询
     * @param serialNo  （可空）序列
     * @param createTimeBegin  （可空） 开始创建日期
     * @param createTimeEnd     （可空）结束创建日期
     * @param status    （可空）状态
     * @return List<DrugInputOutput> 查询结果集
     */
    @GetMapping("listBySerialNo")
    public Object listBySerialNo(
            @RequestParam(value = "serialNo", defaultValue = "") Long serialNo,
            @RequestParam(value = "createTimeBegin", defaultValue = "") String createTimeBegin,
            @RequestParam(value = "createTimeEnd", defaultValue = "") String createTimeEnd,
            @RequestParam(value = "status", defaultValue = "") Integer status) {
//       创建查询筛选器
        QueryWrapper<DrugInputOutput> queryWrapper = new QueryWrapper<>();
        if (serialNo != null) {
            queryWrapper.eq("serial_no", serialNo);
        }
        if (StringUtils.isNotEmpty(createTimeBegin) || StringUtils.isNotEmpty(createTimeEnd)) {
            // 设置开始日期时分秒00:00:00 结束日期 23:59:59
            createTimeBegin += " 00:00:00";
            createTimeEnd += " 23:59:59";
            // 字符串转日期
//            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//            LocalDateTime.parse(createTimeBegin,dtf)
            queryWrapper.between("gmt_create", createTimeBegin, createTimeEnd);
        }
        if (status != null) {
            queryWrapper.eq("status", status);
        }
//      执行查询
        List<DrugInputOutput> list = iDrugInputOutputService.list(queryWrapper);
        return HisResult.ok(list);
    }

    /**
     * 出入库明细表：单条更新
     *
     * @param drugInputOutput 出入库明细实体
     * @return 更新成功的 drugInputOutput 数据
     */
    @PutMapping("/update")
    public Object update(DrugInputOutput drugInputOutput) {
        // 空值检测
        if (StringUtils.isEmpty(drugInputOutput.getType())) {
            return HisResult.error("出入库类型不能为空");
        } else if (drugInputOutput.getDrugId() == null) {
            return HisResult.error("药品ID不能为空");
        } else if (StringUtils.isEmpty(drugInputOutput.getDrugUnit())) {
            return HisResult.error("药品单位不能为空");
        } else if (drugInputOutput.getPrice() == null) {
            return HisResult.error("价格不能为空");
        } else if (drugInputOutput.getNumber() == null) {
            return HisResult.error("数量不能为空");
        } else if (drugInputOutput.getId() == null) {
            return HisResult.error("ID不能为空");
        }
        // 执行更新
        try {
            if (iDrugInputOutputService.updateById(drugInputOutput)) {
                return HisResult.ok(drugInputOutput);
            } else {
                return HisResult.error("出入库明细表：单条更新失败");
            }
        } catch (Exception e) {
            log.error("出入库明细表：单条更新出错！出错提示：", e);
            return HisResult.error("出入库明细表：单条更新出错");
        }
    }


}

